// package com.shengxi.jttest;
//
// /**
//  * @author lpj
//  * @version 1.0
//  * @description: TODO
//  * @date 2021/11/11 19:45
//  */
//
// import org.eclipse.paho.client.mqttv3.*;
// import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
// import org.slf4j.Logger;
// import org.slf4j.LoggerFactory;
//
// import java.util.UUID;
//
// /**
//  * description:
//  * author: yangzihe
//  * date: 2018-12-17 17:33
//  **/
// public class MyMQTTClient {
//
//     String host = "tcp://127.0.0.1:1883";
//     String username = "admin";
//     String clientId="test1";
//     String password = "public";
//     int timeOut = 1000;
//     int keepAlive = 2000;
//
//     private static final Logger LOGGER = LoggerFactory.getLogger(MyMQTTClient.class);
//     private static MqttClient client;
//
//     public static MqttClient getClient() {
//         return client;
//     }
//
//     public static void setClient(MqttClient client) {
//         MyMQTTClient.client = client;
//     }
//
//     public MyMQTTClient() {
//     }
//
//
//
//         /**
//          * 设置mqtt连接参数
//          *
//          * @return
//          */
//     public MqttConnectOptions setMqttConnectOptions() {
//         MqttConnectOptions options = new MqttConnectOptions();
//         options.setUserName(username);
//         options.setPassword(password.toCharArray());
//         options.setConnectionTimeout(timeOut);
//         options.setKeepAliveInterval(keepAlive);
//         options.setCleanSession(false);
//         return options;
//     }
//
//     /**
//      * 连接mqtt服务端，得到MqttClient连接对象
//      */
//     public void connect() throws MqttException {
//        // String clientId=System.currentTimeMillis()+ UUID.randomUUID().toString().substring(0,8);
//
//         client = new MqttClient(host, clientId, new MemoryPersistence());
//         client.setCallback(new MyMQTTCallback(MyMQTTClient.this));
//         MqttConnectOptions mqttConnectOptions = setMqttConnectOptions();
//         mqttConnectOptions.setAutomaticReconnect(false);
//
//         if (!client.isConnected()) {
//             client.connect(mqttConnectOptions);
//         } else {
//             client.disconnect();
//             client.connect(mqttConnectOptions);
//             LOGGER.info("disconnect");
//         }
//         LOGGER.info("MQTT connect success");//未发生异常，则连接成功
//     }
//
//     /**
//      * 发布，默认qos为0，非持久化
//      *
//      * @param pushMessage
//      * @param topic
//      */
//     public void publish( String topic,String pushMessage) {
//         publish(pushMessage, topic, 0, false);
//     }
//
//     /**
//      * 发布消息
//      *
//      * @param pushMessage
//      * @param topic
//      * @param qos
//      * @param retained:留存
//      */
//     public void publish(String pushMessage, String topic, int qos, boolean retained) {
//         MqttMessage message = new MqttMessage();
//         message.setPayload(pushMessage.getBytes());
//         message.setQos(qos);
//         message.setRetained(retained);
//         MqttTopic mqttTopic = MyMQTTClient.getClient().getTopic(topic);
//         if (null == mqttTopic) {
//             LOGGER.error("topic is not exist");
//         }
//         MqttDeliveryToken token;//Delivery:配送
//         synchronized (this) {//注意：这里一定要同步，否则，在多线程publish的情况下，线程会发生死锁，分析见文章最后补充
//             try {
//                 token = mqttTopic.publish(message);//也是发送到执行队列中，等待执行线程执行，将消息发送到消息中间件
//                 token.waitForCompletion(1000L);
//             } catch (MqttPersistenceException e) {
//                 e.printStackTrace();
//             } catch (MqttException e) {
//                 e.printStackTrace();
//             }
//         }
//     }
//
//     /**
//      * 订阅某个主题，qos默认为0
//      *
//      * @param topic
//      */
//     public void subscribe(String topic) {
//         subscribe(topic, 0);
//     }
//
//     /**
//      * 订阅某个主题
//      *
//      * @param topic
//      * @param qos
//      */
//     public void subscribe(String topic, int qos) {
//         try {
//             MyMQTTClient.getClient().subscribe(topic, qos);
//         } catch (MqttException e) {
//             e.printStackTrace();
//         }
//     }
// }
//
